import asyncio
import websockets
import json
import os
from user.views import *


async def rec(websocket, path):
    print('---- 建立了接收连接 -----')
    while True:
        message = await websocket.recv()
        print(message)
        if message == "register":
            ms = register()
            await websocket.send(ms)
            pass
        elif message == "exec":
            print("receive: ")

            msg = "MatlabExecutionError(‘\n  File O:\\spacefive\\areoDB\\aero-db\\algo.m, line 3, in algo\n未定义函数或变量 'c'。\n’)"
            await websocket.send(msg)

        elif message == "findAllRecords":
            print("历史 ")
            msg = "[{'id': 1, 'algoId': 9, 'date': '2022-02-26 19:22:57', 'output': '33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333', 'message': 'success', 'success': 'True', 'input':[]}, {'id': 2, 'algoId': 9,'date': '2022-02-26 19:27:19', 'output': '3', 'message': 'success', 'success': 'True', 'input': [{'value_type': 'int', 'type': 1, 'value': 1}, {'value_type': 'int', 'type': 1, 'value': 2}]}, {'id': 3, 'algoId': 9, 'date': '2022-02-26 19:36:46', 'output': '3', 'message': 'success', 'success': 'True', 'input': [{'value_type': 'int', 'type': 1, 'value': 1}, {'value_type': 'int', 'type': 1, 'value': 2}]}]"
            await websocket.send(msg)
            # addAlo()
            """
            这是传入算法的参数,调用use即使用该算法，1是算法id，需先用addAlo添加算法，路径需要是真实的算法路径。
            目前以PCA为例子，传入参数是input（都整合进一个列表了），需要根据Matlab作实际调整
            """
            # input = algo["input"]
            # id=algo["id"]
            # algorithm.use(session,id, input)
        elif message == "getAllUserTables":
            print("历史 ")
            msg = "['algorithm', 'allFile', 'element', 'helllo', 'hi', 'hihi', 'hihihi', 'input', 'output', 'qqq', 'sqlite_sequence', 'test2', 'test5', 'testnew', 'user', 'userdefined']"
            await websocket.send(msg)
        elif message == "getUserTable":
            print("123 ")
            msg = '[{"id": [2], "column": [{"name": "e", "type": 1}], "data": [[null]]}]'
            await websocket.send(msg)
        elif message == "systemAll":
            print("sys ")
            msg = '[{"id": 1, "name": "供配电", "description": "", "pro": [{"id": 1, "alo": [{id:1,name:"PCV"},{id:2,name:"ppcv"},{id:3,name:"hhh"}], "name": "电源控制装置"}, {"id": 2, "alo": [], "name": "母线过压保护部件"}, {"id": 3, "alo": [], "name": "蓄电池组"}, {"id": 4, "alo": [], "name": "电缆网"}, {"id": 5, "alo": [], "name": "太阳翼"}, {"id": 6, "alo": [], "name": "太阳翼"}, {"id": 7, "alo": [], "name": "载荷配电单元"}]}, {"id": 2, "name": "测控", "description": "", "pro": []}, {"id": 3, "name": "综合电子", "description": "", "pro": []}, {"id": 4, "name": "控制", "description": "", "pro": []}, {"id": 5, "name": "供配电", "description": "", "pro": []}, {"id": 6, "name": "测控", "description": "", "pro": []}, {"id": 7, "name": "综合电子", "description": "", "pro": []}, {"id": 8, "name": "控制", "description": "", "pro": []}]'
            await websocket.send(msg)

        # 用id从数据库查找算法的地址、参数类型
        # 检验数据正确性（怎样检验）
        # 用前端提供的数据调用算法

        # print(algo["ele"])
        # await websocket.send(ms)
        # print(">hello ",name )


# async def send(websocket, path):
#     print('---- 建立了发送连接 -----')
#     while True:
#         await asyncio.sleep(10)
#         message = "message2send"
#         await websocket.send(message)
async def test():
    print("websocketStart")


async def server(websocket, path):
    task3 = asyncio.create_task(test())
    task1 = asyncio.create_task(rec(websocket, path))
    # task2 = asyncio.create_task(send(websocket, path))

    await task3
    await task1
    # await task2


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'YMRS.settings')
    start_server = websockets.serve(server, '127.0.0.1', 8000)

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()


if __name__ == "__main__":
    main()
